from sqlalchemy import UniqueConstraint, func

from tzq.extensions import db


# 数据库信息表
class DatabaseInfo(db.Model):
    __tablename__ = 'database_info_t'  # 数据库表名
    id = db.Column(db.Integer, primary_key=True)
    database_code = db.Column(db.String(300), unique=True)  # 数据库code：tpc_gauss_ins_sit
    project = db.Column(db.String(300))  # 项目：TPC
    module = db.Column(db.String(300))  # 模块：计划
    usage = db.Column(db.String(300))  # 用途：SIT
    database_type = db.Column(db.String(300))  # 数据库类型
    database_name = db.Column(db.String(300))  # 数据库名称
    ip_address = db.Column(db.String(300))  # 数据库IP地址
    port = db.Column(db.String(300))  # 端口
    schema = db.Column(db.String(300))  # schema
    username = db.Column(db.String(300))  # 用户名
    password = db.Column(db.String(300))  # 密码


# 权限表
class DatabasePermission(db.Model):
    __tablename__ = 'database_permission_t'  # 数据库表名
    id = db.Column(db.Integer, primary_key=True)
    ip_address = db.Column(db.String(300))  # 数据库IP地址
    database_code = db.Column(db.String(300))  # 数据库code
    # SQLAlchemy 实现联合唯一约束
    __table_args__ = (
        UniqueConstraint('ip_address', 'database_code', name='uk_database_permission_1'),
    )


# 用户登录信息表
class UserLogin(db.Model):
    __tablename__ = 'user_login'  # 数据库表名
    id = db.Column(db.Integer, primary_key=True)
    ip_address = db.Column(db.String(300))  # 数据库IP地址
    # login_time = db.Column(db.DateTime, server_default=func.now())  # 登录时间
    login_time = db.Column(db.DateTime, nullable=True, server_default=func.now())

    def __repr__(self):
        return f'<UserLogin {self.id}>'
